# -*- coding: utf-8 -*-
from formencode.validators import Regex, Invalid

__all__ = ["RG_RNE"]

class RG_RNE(Regex):
    u"""
    Infelizmente a validação de números de RG / RNE é algo que não possui uma
    regra fixa, portanto esta implementação apenas verifica que não há
    caracteres inválidos presentes no documento informado.

    São considerados válidos:

        - Letras
        - Números
        - "."
        - "-"

    TODO:. Esta classe não devia ter entrado no código sem testes...  Só é
           possível testar as falhas, pois não há um algoritmo para o número
           do RG e/ou do RNE.
    """

    messages = {
        'empty': 'Por favor entre com um numero de RG / RNE',
        'invalid': 'RG / RNE invalido',
        'format': 'Formatacao do numero incorreta',
        }

    regex = r"^[A-Z0-9.-]*$"

    def validate_python(self, value, state):
        def __checa_formato(value):
            if (('..' in value) or ('--' in value) or ('-.' in value) or
                ('.-' in value)):
                raise Invalid(self.message('format', state), value, state)
        __checa_formato(value)
        r = Regex(self.regex, messages = self._messages)
        return r.to_python(value)
